//
//  LBServiceManager.h
//  LBFoundation
//
//  Created by WuShiHai on 19/5/24.
//  Copyright (c) 2019 Lebbay. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol LBLoginServiceDelegate <NSObject>

/**
 登录的类名

 @return 未拿到则返回nil
 */
+ (Class)loginControllerClass;

/**
 是否已经登录

 @return 是否登录
 */
+ (BOOL)isLogin;

/**
 登录动作

 @param completeHandler 登录成功后的回调
 */
+ (void)login:(void(^)(void))completeHandler;

@optional

/**
 登录信息之用户id

 @return 字符串
 */
+ (NSString *)userId;

/**
 登录信息之token

 @return 字符串
 */
+ (NSString *)token;

@end

#if !(TARGET_OS_OSX)
@protocol LBWebViewServiceDelegate <NSObject>

/**
 webView页面

 @param URLString h5地址
 @param userInfo 用户信息
 @return 对应的controller
 */
+ (UIViewController *)webController:(NSString *)URLString
                           userInfo:(NSDictionary *)userInfo;

@end

@protocol LBReactServiceDelegate <NSObject>

@optional
/**
 打开React页面

 @param URLString 链接地址，只是记录来源和相关参数
 @param component 打开React 组件的名称，与js代码对应
 @param userInfo 通过URLString进行解析得到的参数
 @return 对应的controller
 */
+ (UIViewController *)reactController:(NSString *)URLString
                            component:(NSString *)component
                             userInfo:(NSDictionary *)userInfo;


/// 判断是否是react页面且打开的是否为component页面
/// @param controller 页面
/// @param component 路径
+ (BOOL)isReactController:(UIViewController *)controller
                component:(NSString *)component;

@end
#endif

#if !(TARGET_OS_OSX)
@interface LBServiceManager : NSObject<LBLoginServiceDelegate, LBWebViewServiceDelegate, LBReactServiceDelegate>
#else
@interface LBServiceManager : NSObject<LBLoginServiceDelegate>
#endif

/**
 注册登录服务代理

 @param delegate 代理
 */
+ (void)registerLoginService:(id<LBLoginServiceDelegate>)delegate;

#if !(TARGET_OS_OSX)
/**
 注册WebView服务代理

 @param delegate 代理
 */
+ (void)registerWebViewService:(id<LBWebViewServiceDelegate>)delegate;

/**
 注册React服务代理

 @param delegate 代理
 */
+ (void)registerReactService:(id<LBReactServiceDelegate>)delegate;

+(NSDictionary *)accountUserInfo:(BOOL)isSave saveData:(NSDictionary *)userData;

#endif

@end
